<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>什么是闭包</title>
</head>
<body>
<!--
  闭包不用调用内部函数
    1：闭包的产生？
        * 当一个函数内部嵌套的函数(子函数)引用了外部函数(父函数)的变量时,就产生了闭包
    2：闭包是什么？
        * 大少部分人认为：是嵌套的内部函数
        * 少部分人认为：包含被引用变量(函数)的对象
    3：闭包产生的条件？
        * 函数的嵌套
        * 内部函数引用了外部函数的数据(变量||函数)
    4：闭包的作用？
        * 延长局部变量的生存周期
        * 让外部函数读取到函数内部的数据(变量||函数)
-->

<script>
    // 例子一
    function fn1() {
        //这里就产生了闭包(由于函数提升)
        var a = 2

        function fn2() { //当执行函数定义时就会产生闭包(由于函数提升,闭包在fn1()函数的第一行就产生)
            a++
            console.log(a)
        }

        return fn2
    }

    var f = fn1()//内部函数使用了不被销毁的原因是:这一行 将函数fn2保存到了变量f中;如果需要销毁->f=null
    f()
    f()

    // 例子二
    function timer(message,time){
        setTimeout(function (){
            alert(message)  //如果删除这一行就没有形成闭包 因为没有使用外部函数的数据&&time不在函数内部
        },time)
    }
    timer("hello!",2000)
</script>
</body>
</html>